package algorithm;

import java.util.Arrays;

/**
 * @author fangkun
 * @create 2022-05-16-9:34
 *
 * 给你输⼊若⼲形如 [begin, end] 的区间，代表若⼲会议的开始时间和结束时间，请你计算⾄少需要申请多
 * 少间会议室。
 */
public class meetingRooms {

    public static void main(String[] args) {

        int[][] meetings = new int[][]{{0,30},{5,10},{15,20}};
        int i = minMeetingRooms(meetings);
        System.out.println(i);

    }

    static int minMeetingRooms(int[][] meetings) {

        int n = meetings.length;
        int[] begin = new int[n];
        int[] end = new int[n];
        for(int i = 0; i < n; i++) {
            begin[i] = meetings[i][0];
            end[i] = meetings[i][1];
        }
        Arrays.sort(begin);
        Arrays.sort(end);
        // 扫描过程中的计数器
        int count = 0;
        // 双指针技巧
        int res = 0, i = 0, j = 0;
        while (i < n && j < n) {
            if (begin[i] < end[j]) {
                // 扫描到⼀个红点
                count++;
                i++;
            } else {
                // 扫描到⼀个绿点
                count--;
                j++;
            }
            // 记录扫描过程中的最⼤值
            res = Math.max(res, count);
        }

        return res;
    }

}
